using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IntelligenceTools._Analysis._BlindSpot
{
    /// <summary>
    /// <para>Generate Blind Spot Areas</para>
    /// <para>Creates an output nonvisible area, or blind spot, for input Intelligence, Surveillance, Reconnaissance (ISR) or patrol visible buffer features based on start and end times. The output blind spot layer is used with the  time slider to visualize and explore areas that are not visible to ISR or patrol assets at specified times.</para>
    /// <para>根据开始和结束时间为输入情报、监视、侦察 （ISR） 或巡逻可见缓冲区要素创建输出不可见区域或盲点。输出盲点图层与时间滑块一起使用，以可视化和探索在指定时间对 ISR 或巡逻资产不可见的区域。</para>
    /// </summary>    
    [DisplayName("Generate Blind Spot Areas")]
    public class GenerateBlindSpotAreas : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateBlindSpotAreas()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input visible buffer features.</para>
        /// <para>输入可见缓冲区功能。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Features</para>
        /// <para>The output blind spot area features.</para>
        /// <para>输出盲点区域功能。</para>
        /// </param>
        public GenerateBlindSpotAreas(object _in_features, object _out_feature_class)
        {
            this._in_features = _in_features;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Intelligence Tools";

        public override string ToolName => "Generate Blind Spot Areas";

        public override string CallName => "intelligence.GenerateBlindSpotAreas";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_features, _out_feature_class, _clip_features, _start_time_field, _end_time_field];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input visible buffer features.</para>
        /// <para>输入可见缓冲区功能。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Features</para>
        /// <para>The output blind spot area features.</para>
        /// <para>输出盲点区域功能。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Clip Features</para>
        /// <para>The features used to define the input boundary.</para>
        /// <para>用于定义输入边界的特征。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clip Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _clip_features { get; set; } = null;


        /// <summary>
        /// <para>Start Time Field</para>
        /// <para>The field containing the start date and time when the asset is available.</para>
        /// <para>包含资产可用的开始日期和时间的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Start Time Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _start_time_field { get; set; } = null;


        /// <summary>
        /// <para>End Time Field</para>
        /// <para>The field containing the end date and time when the asset is no longer available.</para>
        /// <para>包含资产不再可用的结束日期和时间的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("End Time Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _end_time_field { get; set; } = null;


        public GenerateBlindSpotAreas SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}